package untiring.helper;

import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.util.FileCopyUtils;


@Component("downloadUtil")
public class FileDownloadUtil {
	
	
	private String fpath = "d:/uploadRepo/";
	
	//첨부파일 다운로드
	public byte[]processDownload(String fname, HttpServletResponse res , boolean browser) throws Exception{
		byte[] downFile = null;
		// 다운로드 할 파일의 내용을 바이너리로 저장하기 위해 byte배열형 변수 선언
		String downOne = fpath + fname;
		File f = new File(downOne);
		//다운로드할 파일의 위치 지정
		downFile = FileCopyUtils.copyToByteArray(f);
		//다운로드할 파일의 내용을 읽어서 바이트배열로 저장
		
		//공백 및 한글처리
		fname = this.manageEncoding(fname, browser);
		
		
		// 서버가 바이트 배열을 전송하기전에 클라이언트가 이것을 올바르게 받도록 준비시킴
		res.setContentType("unknown/unknown");
		res.setContentLength((int)f.length());
		res.setHeader("Content-Transfer-Encoding", "binary");
		res.setHeader("Content-Disposition", "attachment; filename="+ fname);
		
		return downFile;
	}
	
	public String manageEncoding(String fname, boolean browser) throws Exception{
		//다은로드 시 파일이름에 포함된 공백처리
				fname = fname.replaceAll("\\ ", "_");
				//다운로드시 한글깨짐 방지
				//한글 파일명 처리
				if(!browser)//FF가 아니면
				fname = URLEncoder.encode(fname,"UTF-8"); // 파폭에서는 깨짐
				else
				fname = new String(fname.getBytes("UTF-8"), "ISO-8859-1");
				return fname;
	}
	

}
